var gulp = require('gulp');
// var ts = require("gulp-typescript");
// var tsProject = ts.createProject('tsconfig.json');
var browserify = require('browserify');
var watchify = require("watchify");
var source = require('vinyl-source-stream');
var tsify = require('tsify');
var uglify = require('gulp-uglify');
var sourcemaps = require('gulp-sourcemaps');
var buffer = require('vinyl-buffer');
var gutil = require('gulp-util');
var paths = {
  pages: ['src/*.html']
}
// gulp.task("default", function () {
//   return tsProject.src()
//     .pipe(tsProject())
//     .js.pipe(gulp.dest('dist'));
// });
var watchedBrowserify = watchify(browserify({
    basedir: '',
    debug: true,
    entries: ['src/main.ts'],
    cache: "",
    packageCache: {}
  })
  .plugin(tsify)); // 登记一个插件，用来调用Browserify

gulp.task('copy-html', function () {
  return gulp.src(paths.pages)
    .pipe(gulp.dest('dist'));
})

function bundle() {
  return watchedBrowserify
    .transform('babelify',{// 预编译器 默认情况下Babelify只会处理扩展名为 .js .es .es6 和 .jsx的文件
      presets:['es2015'],// 预置
      extensions:['.ts']// 扩展 我们需要添加.ts扩展名到Babelify选项。
    })
    .bundle() // 打包
    .pipe(source('bundle.js')) // 使用source把输出的文件命名为bundle.js
    .pipe(buffer()) // buffer和sourcemaps的调用是用于确保sourcemaps可以工作
    .pipe(sourcemaps.init({loadMaps:true}))
    .pipe(uglify()) // 压缩代码
    .pipe(sourcemaps.write('./'))
    .pipe(gulp.dest('dist')); // 写文件
}
gulp.task("default", ['copy-html'], bundle); // 执行任务 default 必须在copy-html执行完成之后才能执行
watchedBrowserify.on('update',bundle); // 每次TypeScript文件改变时Browserify会执行bundle函数
watchedBrowserify.on('log',gutil.log);// 打印日志